home *** CD-ROM | disk | FTP | other *** search
/ Workbench Add-On / Workbench Add-On - Volume 1.iso / Dev / Oberon / source / FPE / FPE.mod < prev    next >
Text File  |  1995-06-29  |  5KB  |  189 lines

  1. (*************************************************************************
  2.  
  3.      $RCSfile: FPE.mod $
  4.   Description: Frank's Programming Environment
  5.  
  6.                A programming utility designed to integrate seperate
  7.                programming tools (editor, compiler, linker, etc.) into a
  8.                single system.  It also provides a simple source code
  9.                manager.
  10.      Requires: asl.library intuisup.library
  11.  
  12.    Created by: fjc (Frank Copeland)
  13.     $Revision: 1.16 $
  14.       $Author: fjc $
  15.         $Date: 1995/06/29 18:49:53 $
  16.  
  17.   Copyright © 1993-1995, Frank Copeland.
  18.   This file is part of FPE.
  19.   See FPE.doc for conditions of use and distribution.
  20.  
  21.   Log entries are at the end of the file.
  22.  
  23. *************************************************************************)
  24.  
  25. <* STANDARD- *> <*$ NilChk- *>
  26.  
  27. MODULE FPE;
  28.  
  29. IMPORT
  30.   SYS := SYSTEM, Kernel, e := Exec, d := Dos, ASL, is := IntuiSup, Data,
  31.   dlg := FPEDlg, Errors, wb := Workbench, du := DosUtil, u := Utility;
  32.  
  33.  
  34. CONST VersionTag = "$VER: FPE 1.12 (21.6.95)";
  35.  
  36. (* -- Command line template and parsing ------------------------------- *)
  37.  
  38. CONST
  39.  
  40.   template = "PROJECT";
  41.  
  42.   optPROJECT = 0;
  43.   optCount   = 1;
  44.  
  45. VAR
  46.  
  47.   rdArgs : d.RDArgsPtr;
  48.   args : RECORD [2] (d.ArgsStruct)
  49.     project : d.ArgString
  50.   END;
  51.  
  52. (*
  53. ** Lock on starting directory when run from Workbench.
  54. *)
  55.  
  56. VAR
  57.   startDir : d.FileLockPtr;
  58.  
  59.  
  60. (*------------------------------------*)
  61. PROCEDURE* Cleanup (VAR rc : LONGINT);
  62.   VAR oldDir : d.FileLockPtr;
  63. BEGIN (* Cleanup *)
  64.   IF rdArgs # NIL THEN
  65.     d.FreeArgs (rdArgs);
  66.     d.FreeDosObject (d.rdArgs, rdArgs);
  67.     rdArgs := NIL
  68.   END;
  69.   IF startDir # NIL THEN
  70.     oldDir := d.CurrentDir (startDir);
  71.     d.UnLock (Data.currentDir);
  72.   END
  73. END Cleanup;
  74.  
  75.  
  76. (*------------------------------------*)
  77. PROCEDURE Init ();
  78.  
  79.   VAR
  80.     programName, pathPart : e.LSTRPTR;
  81.     programNameIndex : INTEGER;
  82.     ignore : d.FileLockPtr;
  83.     wbStartup : wb.WBStartupPtr;
  84.     me : d.ProcessPtr;
  85.  
  86. BEGIN (* Init *)
  87.   ASSERT (ASL.base # NIL, 100);
  88.   ASSERT (is.base # NIL, 100);
  89.   rdArgs := d.AllocDosObjectTags (d.rdArgs, u.end);
  90.   ASSERT (rdArgs # NIL, 132);
  91.  
  92.   Kernel.SetCleanup (Cleanup);
  93.  
  94.   Data.Init();
  95.   dlg.Init();
  96.  
  97.   IF Kernel.fromWorkbench THEN
  98.     wbStartup := SYS.VAL (wb.WBStartupPtr, Kernel.WBenchMsg);
  99.     IF wbStartup.numArgs = 1 THEN
  100.       programNameIndex := 0;
  101.       Data.currentDir := d.DupLock (wbStartup.argList [0].lock);
  102.     ELSIF wbStartup.numArgs = 2 THEN
  103.       programNameIndex := 1;
  104.       Data.currentDir := d.DupLock (wbStartup.argList [1].lock);
  105.     ELSE
  106.       Errors.Abort ("FPE - too many arguments")
  107.     END;
  108.     programName := wbStartup.argList [programNameIndex].name;
  109.     IF programName = NIL THEN Data.programName := "";
  110.     ELSE COPY (programName^, Data.programName)
  111.     END
  112.   ELSE
  113.     IF d.ReadArgs (template, args, rdArgs) = NIL THEN
  114.       ASSERT (d.PrintFault (d.IoErr(), "ReadArgs"));
  115.       HALT (d.warn)
  116.     END;
  117.     IF args.project # NIL THEN
  118.       programName := d.FilePart (args.project^);
  119.       COPY (programName^, Data.programName);
  120.       pathPart := d.PathPart (args.project^);
  121.       IF pathPart = args.project THEN
  122.         Data.currentDir := d.Lock (e.EMPTYSTR, d.sharedLock);
  123.       ELSE
  124.         pathPart [0] := 0X;
  125.         Data.currentDir := d.Lock (args.project^, d.sharedLock)
  126.       END
  127.     ELSE
  128.       Data.programName := "";
  129.       Data.currentDir := d.Lock (e.EMPTYSTR, d.sharedLock)
  130.     END
  131.   END;
  132.   startDir := d.CurrentDir (Data.currentDir);
  133.   ASSERT ( d.NameFromLock ( Data.currentDir,
  134.                             Data.currentPath,
  135.                             LEN(Data.currentPath) - 1) )
  136. END Init;
  137.  
  138.  
  139. (*------------------------------------*)
  140. PROCEDURE Main ();
  141.  
  142. BEGIN (* Main *)
  143.   dlg.Open ();
  144.   dlg.Start ();
  145. END Main;
  146.  
  147. BEGIN (* FPE *)
  148.   Errors.Init;
  149.   Init();
  150.   Main();
  151. END FPE.
  152.  
  153. (***************************************************************************
  154.  
  155.   $Log: FPE.mod $
  156.   Revision 1.16  1995/06/29  18:49:53  fjc
  157.   - Release 1.6
  158.  
  159.   Revision 1.15  1995/06/15  18:26:19  fjc
  160.   - Bumped revision date
  161.  
  162.   Revision 1.14  1995/06/04  22:45:26  fjc
  163.   - Fixed Enforcer hit in argument parsing code.
  164.  
  165.   Revision 1.13  1995/05/08  16:42:32  fjc
  166.   *** empty log message ***
  167.  
  168.   Revision 1.12  1995/02/07  20:14:29  fjc
  169.   - Release 1.5 update 1
  170.  
  171.   Revision 1.11  1995/01/26  00:15:33  fjc
  172.   - Release 1.5
  173.  
  174.   Revision 1.10  1994/09/25  18:20:54  fjc
  175.   - Uses new syntax for external code declarations
  176.  
  177.   Revision 1.5  1994/06/04  23:49:52  fjc
  178.   - Changed to use new Amiga interface
  179.  
  180.   0.6  (06-Sep-93)  General code rework and tidy-up
  181.                     Changed the way module Data handles tools.
  182.                     Changed the tool dialog to conform.
  183.                     General improvements.
  184.   0.5  (25-Jul-93)  First Oberon version, renamed to FPE.
  185.   0.0 - 0.4         Early versions written in Modula 2 and
  186.                     named M2Org.
  187.  
  188. ***************************************************************************)
  189.